package com.lanyou.esb.cook.proxy.service;

import java.util.Date;

import com.lanyou.esb.cook.proxy.entity.AccLog;
import com.lanyou.esb.cook.proxy.entity.IfAccTimes;
import com.lanyou.esb.cook.proxy.entity.IfAlrReqTimes;
import com.lanyou.esb.cook.proxy.entity.IfAvgResTimes;
import com.lanyou.esb.cook.proxy.entity.PfThroughput;
import com.lanyou.esb.cook.proxy.entity.TraceLog;
import com.lanyou.esb.cook.proxy.meta.Environment;
import com.lanyou.esb.cook.proxy.meta.TimeUnit;
import com.lanyou.esb.cook.proxy.redis.vo.Group;
import com.lanyou.esb.cook.proxy.vo.EntityGroup;

/**
 * Redis批处理接口
 * 
 * @author Davey.wu
 */
public interface RedisBatchService {
	/**
	 * 根据系统编码、接口编码及接口版本号获取系统及接口信息
	 * 
	 * @param systemCode
	 *            ：系统编码
	 * @param ifCode
	 *            ：接口编码
	 * @param ifVersion
	 *            ：接口版本
	 * @return
	 * @throws Exception
	 */
	EntityGroup getPubSystemAndHttp(String systemCode, String ifCode,
			String ifVersion) throws Exception;

	/**
	 * 批量从redis中获取接口调用相关信息
	 * 
	 * @param systemCode
	 *            ：系统编码
	 * @param callystemCode
	 * @param ifCode
	 *            ：接口编码
	 * @param ifId
	 *            :接口标识
	 * @param ifVersion
	 *            ：接口版本
	 * @param unit
	 *            ：时间单位
	 * @param date
	 *            ：时间
	 * @param environment
	 *            ：运行环境
	 * 
	 * @return
	 * @throws Exception
	 */
	EntityGroup batchGet(String systemCode, String callystemCode,
			String ifCode, String ifId, String ifVersion, TimeUnit unit,
			Date date, Environment environment) throws Exception;

	/**
	 * 
	 * 
	 * @param alarmList
	 *            ：告警列表
	 * @param ifAvgResTimes
	 *            ：接口平均响应时间
	 * @param ifAccTimes
	 *            ：接口访问次数
	 * @param accLog
	 *            ：访问日志
	 * @param traceLog
	 *            ：跟踪日志
	 */
	/**
	 * 批量将接口调用信息保存至redis
	 * 
	 * @param ifAlrReqTimes
	 *            ：接口时间区间内已访问次数
	 * @param ifAccTimes
	 *            ：接口总访问次数
	 * @param ifAvgResTimes
	 *            ：接口平均响应时间
	 * @param pfThroughput
	 *            ：吞吐量
	 * @param accLog
	 *            ：访问日志
	 * @param traceLog
	 *            ：跟踪日志
	 */
	void batchPush(IfAlrReqTimes ifAlrReqTimes, IfAccTimes ifAccTimes,
			IfAvgResTimes ifAvgResTimes, PfThroughput pfThroughput,
			AccLog accLog, TraceLog traceLog);

	/**
	 * 批量将消息推送至redis
	 * 
	 * @param group
	 *            ：redis批量操作数据组合
	 */
	void batchPush(Group group);

	/**
	 * 批量将消息推送至redis,加事务控制
	 * 
	 * @param group
	 *            ：redis批量操作数据组合
	 */
	void batchPushTransaction(Group group);

}
